#!/bin/sh

. $(pwd)/input_parameters.txt


##############################################################################################################################################################
###################The below codes generate input files for GAMS software and calls PBS to schedule jobs in parallel #########################################
#############################################  Do not change the below codes!! ###############################################################################

# create for each pathway gene expression profile an input file for GAMS
for file in *.csv
do
    pathway_name="${file%.*}"
    echo "\$onmulti"                                    >  $pathway_name.gms
    echo "Set s /"                                      >> $pathway_name.gms
    awk -F"\t" '{print $1}' class_label.txt             >> $pathway_name.gms
    echo "/ \n"                                         >> $pathway_name.gms
    echo "m /"                                          >> $pathway_name.gms
    awk -F"," 'NR==1 {for(i=2; i<=NF; i++) {printf("%s\n", $i)} print "" }' $file  >> $pathway_name.gms
    echo "/; \n"                                        >> $pathway_name.gms
    echo "Parameter sample_class(s)/"                   >> $pathway_name.gms
    cat class_label.txt                                 >> $pathway_name.gms
    echo "/;"                                           >> $pathway_name.gms 
   
    num_class=$( awk -F"\t" 'max=="" || $2 > max {max=$2} END{print max}' class_label.txt) 
    echo "\nSet c /c1*c"$num_class"/\n"                 >> $pathway_name.gms
    echo "Table A(s,m)"                                 >> $pathway_name.gms
    echo "\$ondelim"                                    >> $pathway_name.gms
    echo "\$include" $file                              >> $pathway_name.gms 
    echo "\$offdelim\n"                                 >> $pathway_name.gms
    echo "Parameter"                                    >> $pathway_name.gms
    echo "Scenario / $scenario_setting /"               >> $pathway_name.gms
    echo "NoRun / $num_repetitions_scenario1 /"         >> $pathway_name.gms
    echo "Percentage / $percentage_training_samples_scenario1 /" >> $pathway_name.gms
    echo "NoActiveGene / $num_active_genes /\n"         >> $pathway_name.gms
    echo "\$onecho>cplex.opt"                           >> $pathway_name.gms
    echo "threads $thread_number"                       >> $pathway_name.gms
    echo "epgap $optimality_gap_value"                  >> $pathway_name.gms
    echo "tilim $computational_time_limit"              >> $pathway_name.gms
    echo "\$offecho\n"                                  >> $pathway_name.gms
    echo "\$onecho>gurobi.opt"                          >> $pathway_name.gms
    echo "threads $thread_number"                       >> $pathway_name.gms
    echo "mipgap $optimality_gap_value"                 >> $pathway_name.gms
    echo "timelimit $computational_time_limit"          >> $pathway_name.gms
    echo "\$offecho\n"                                  >> $pathway_name.gms 

    target_path=$work_path/fold_$pathway_name   
    mkdir -p  $target_path

    mv $pathway_name.gms  $target_path 
    cp $file $target_path 
    cp DIGS.g00 $target_path

    echo "#!/bin/bash\n"                                > jobscript_r.pbs
    echo "#PBS -l walltime=1000:00:00\n"                >>jobscript_r.pbs
    echo "#PBS -l nodes=1:ppn=1\n"                      >>jobscript_r.pbs
    echo "#PBS -N $pathway_name\n"                      >>jobscript_r.pbs
    echo "JOBNAME=$pathway_name\n"                      >>jobscript_r.pbs
    echo "RUNDIR=$target_path\n"                        >>jobscript_r.pbs
    echo "cd \$RUNDIR\n"                                >>jobscript_r.pbs
    echo "numnodes=\`wc \$PBS_NODEFILE | awk '{ print $1}'\`\n" >>jobscript_r.pbs
    echo "echo \"MPI job running on \$numnodes nodes\"\n"       >>jobscript_r.pbs
    echo "$call_GAMS \$RUNDIR/\$JOBNAME.gms r=DIGS.g00 mip=$solver_name lo=2 lf=\$RUNDIR/\$JOBNAME.log o=\$RUNDIR/\$JOBNAME.lst" >>jobscript_r.pbs
    mv jobscript_r.pbs  $target_path   
done

for name in *
do
    if [ -d "$name" ];
    then
        qsub ${name}/jobscript_r.pbs
    fi  
done